﻿from dbnew import postgre, mysql, firebird, odbc, oracle


class DbRelations:
	"This class counts and select records for db relations"
	#beginning of class suite
	#print (DbRelations.__doc__)
	#Инициализация:
	def __init__(self):
		self.log=None
		self.db=None
		self.variable=None

	def type(self,type):
		'Function returns db specific type sign'
		return

	def catalogue(self, type):
		'Function returns sql string for the catalogue'
		return
		
	def field(self, type):
		'Function returns sql string for the field'
		return
		
	def list(self, names):
		'Function returns sql string for the list of names'
		return "('"+"','".join(names)+"')"

	def CountString(self, type, names):
		'Function returns sql string for count'
		#Если аргумент names не равен ['']
		if names!=['']:
			string='SELECT COUNT(*) FROM '+self.catalogue(type)+self.field(type)+' IN '+self.list(names)
		else:
			string='SELECT COUNT(*) FROM '+self.catalogue(type)
		return string
	
	def CountlikeString(self, type):
		'Function returns sql string for countlike'
		return 'SELECT COUNT(*) FROM '+self.catalogue(type)+self.field(type)+' LIKE '+self.variable
		
	def SelectString(self, type, names):
		'Function returns sql string for select'
		#Если аргумент names не равен ['']
		if names!=['']:
			string='SELECT * FROM '+self.catalogue(type)+self.field(type)+' IN '+self.list(names)
		else:
			string='SELECT * FROM '+self.catalogue(type)
		return string

	def SelectlikeString(self, type):
		'Function returns sql string for selectlike'
		return 'SELECT * FROM '+self.catalogue(type)+self.field(type)+' LIKE '+self.variable

	def executer(self, string, variable=None):
		return

	#Определяется базовая функция подсчета количества таблиц и видов
	def count(self,type,names):
		'''Function counts relations'''
		#beginning of function suite
		#print(self.count.__doc__)
		#Выполняется подключение к базе данных
		self.db.connect()
		#Переменной result присваивается результат подсчета
		result=self.executer(self.CountString(type, names))[0][0]
		#Закрывается подключение к базе данных
		self.db.disconnect()
		#В переменную класса log записывается лог
		self.log='counted'
		#end of function suite
		#Функция возвращает число таблиц и видов с заданными именами
		return result
		
	#Определяется базовая функция подсчета количества похожих таблиц и видов
	def countlike(self,type,names):
		'''Function counts like relations'''
		#beginning of function suite
		#print(self.countlike.__doc__)
		#Переменной result присваивается ноль
		result=0
		#Выполняется подключение к базе данных
		self.db.connect()
		for name in names:
			#К значению переменной name добавляются %
			name='%'+name+'%'
			#К переменной result прибавляется результат подсчета строк с заданным именем
			result=result+self.executer(self.CountlikeString(type), name)[0][0]
		#Закрывается подключение к базе данных
		self.db.disconnect()
		#В переменную класса log записывается лог
		self.log='counted'
		#end of function suite
		#Функция возвращает число таблиц и видов с похожими именами
		return result

	#Определяется базовая функция выборки записей для таблиц и видов
	def select(self,type,names):
		'''Function counts relations'''
		#beginning of function suite
		#print(self.select.__doc__)
		#Выполняется подключение к базе данных
		self.db.connect()
		#Переменной result присваивается результат выборки
		result=self.executer(self.SelectString(type, names))
		#Закрывается подключение к базе данных
		self.db.disconnect()
		#В переменную класса log записывается лог
		self.log='selected'
		#end of function suite
		#Функция возвращает записи для таблиц и видов с заданными именами
		return result

	#Определяется базовая функция выборки записей для похожих таблиц и видов
	def selectlike(self,type,names):
		'''Function selects like relations'''
		#beginning of function suite
		#print(self.selectlike.__doc__)
		#Переменной query присваивается None
		result=[]
		#Выполняется подключение к базе данных
		self.db.connect()
		for name in names:
			#К значению переменной name добавляются %
			name='%'+name+'%'
			#К переменной result прибавляется результат выборки
			result=result+self.executer(self.SelectlikeString(type), name)
		#Закрывается подключение к базе данных
		self.db.disconnect()
		#В переменную класса log записывается лог
		self.log='selected'
		#end of function suite
		#Функция возвращает записи для видов и таблиц с похожими именами
		return result

	#Определяется функция подсчета количества таблиц
	def CountTables(self,names=['']):
		'''Function counts tables'''
		#beginning of function suite
		#print(self.CountTables.__doc__)
		#end of function suite
		#Функция возвращает число таблиц с заданными именами
		return self.count(self.type('t'),names)

	#Определяется функция подсчета количества видов
	def CountViews(self,names=['']):
		'''Function counts views'''
		#beginning of function suite
		#print(self.CountViews.__doc__)
		#end of function suite
		#Функция возвращает число видов с заданными именами
		return self.count(self.type('v'),names)

	#Определяется функция подсчета количества похожих таблиц
	def CountlikeTables(self,names=['']):
		'''Function counts tables'''
		#beginning of function suite
		#print(self.CountlikeTables.__doc__)
		#end of function suite
		#Функция возвращает число таблиц с похожим именами
		return self.countlike(self.type('t'),names)

	#Определяется функция подсчета количества похожих видов
	def CountlikeViews(self,names=['']):
		'''Function counts views'''
		#beginning of function suite
		#print(self.CountlikeViews.__doc__)
		#end of function suite
		#Функция возвращает число видов с похожим именами
		return self.countlike(self.type('v'),names)

	#Определяется функция выборки таблиц
	def SelectTables(self,names=['']):
		'''Function selects tables'''
		#beginning of function suite
		#print(self.SelectTables.__doc__)
		#end of function suite
		#Функция возвращает выборку таблиц с заданными именами
		return self.select(self.type('t'),names)

	#Определяется функция выборки видов
	def SelectViews(self,names=['']):
		'''Function selects views'''
		#beginning of function suite
		#print(self.SelectViews.__doc__)
		#end of function suite
		#Функция возвращает выборку видов с заданными именами
		return self.select(self.type('v'),names)

	#Определяется функция выборки похожих таблиц
	def SelectlikeTables(self,names=['']):
		'''Function selects like tables'''
		#beginning of function suite
		#print(self.SelectlikeTables.__doc__)
		#end of function suite
		#Функция возвращает выборку таблиц с похожими именами
		return self.selectlike(self.type('t'),names)

	#Определяется функция выборки похожих видов
	def SelectlikeViews(self,names=['']):
		'''Function selects like views'''
		#beginning of function suite
		#print(self.SelectlikeViews.__doc__)
		#end of function suite
		#Функция возвращает выборку видов с похожими именами
		return self.selectlike(self.type('v'),names)

	#end of class OraRelations suite

class OraRelations(DbRelations):
	"This class counts and select records for ora relations"
	#beginning of class suite
	#print (OraRelations.__doc__)
	#Инициализация:
	def __init__(self):
		super(OraRelations, self).__init__()
		self.db=oracle()
		self.variable=':NAME'
	#Заменяется родительская функция
	def catalogue(self, type):
		return 'USER_'+type.upper()
	
	#Заменяется родительская функция
	def field(self, type):
		return ' WHERE '+type.upper()[:-1]+'_NAME'
	
	#Заменяется родительская функция
	def type(self,type):
		'Function returns db specific type sign'
		dict={'t':'TABLES','v':'VIEWS'}
		return dict[type]
	
	def executer(self, string, variable=None):
		#Выполняется транзакция
		if not variable:
			self.db.cursor.execute(string)
		else:
			self.db.cursor.execute(string, NAME=variable)
		#Функция возвращает результат запроса
		return self.db.cursor.fetchall()

	#end of class OraRelations suite

class FdbRelations(DbRelations):
	"This class counts and select records for fdb relations"
	#beginning of class suite
	#print (OFdbRelations.__doc__)
	#Инициализация:
	def __init__(self):
		super(FdbRelations, self).__init__()
		self.db=firebird()
		self.variable='?'

	def catalogue(self, type):
		return 'RDB$RELATIONS WHERE RDB$SYSTEM_FLAG=0 AND RDB$RELATION_TYPE IN '+type

	def field(self, type):
		return ' AND '+'TRIM(RDB$RELATION_NAME)'
	
	def type(self,type):
		'Function returns db specific type sign'
		dict={'t':'(0)','v':'(1)','a':'(0,1)'}
		return dict[type]

	def executer(self, string, variable=None):
		#Выполняется транзакция
		if not variable:
			self.db.cursor.execute(string)
		else:
			self.db.cursor.execute(string, [variable])
		#Функция возвращает результат запроса
		return self.db.cursor.fetchall()

	#Определяется функция выборки похожих таблиц и видов
	def SelectlikeAny(self,names=['']):
		'''Function selects like any'''
		#beginning of function suite
		#print(self.SelectlikeAny.__doc__)
		#end of function suite
		#Функция возвращает выборку таблиц и видов с похожими именами
		return self.selectlike(self.type('a'),names)

	#Определяется функция выборки таблиц и видов
	def SelectAny(self,names=['']):
		'''Function selects any'''
		#beginning of function suite
		#print(self.SelectAny.__doc__)
		#end of function suite
		#Функция возвращает выборку таблиц и видов с заданными именами
		return self.select(self.type('a'),names)
	
	#Определяется функция подсчета количества похожих таблиц и видов
	def CountlikeAny(self,names=['']):
		'''Function counts any'''
		#beginning of function suite
		#print(self.CountlikeAny.__doc__)
		#end of function suite
		#Функция возвращает число таблиц и видов с похожим именами
		return self.countlike(self.type('a'),names)
	
	#Определяется функция подсчета количества таблиц и видов
	def CountAny(self,names=['']):
		'''Function counts any'''
		#beginning of function suite
		#print(self.CountAny.__doc__)
		#end of function suite
		#Функция возвращает число таблиц и видов с заданными именами
		return self.count(self.type('a'),names)

	#end of class OraRelations suite

class PgRelations(DbRelations):
	"This class counts and select records for pg relations"
	#beginning of class suite
	#print (PgRelations.__doc__)
	#Инициализация:
	def __init__(self):
		super(PgRelations, self).__init__()
		self.db=postgre()
		self.variable='$1'
	#Заменяется родительская функция
	def catalogue(self, type):
		return 'pg_'+type.upper()
	
	#Заменяется родительская функция
	def field(self, type):
		return ' WHERE '+type.lower()[:-1]+'name'
	
	#Заменяется родительская функция
	def type(self,type):
		'Function returns db specific type sign'
		dict={'t':'tables','v':'views'}
		return dict[type]
	
	def executer(self, string, variable=None):
		#Выполняется транзакция
		if not variable:
			cursor=self.db.conn.prepare(string)()
		else:
			cursor=self.db.conn.prepare(string)(variable)
		#Функция возвращает результат запроса
		return cursor

	#end of class PgRelations suite





class View:
	"This class is a base class to manipulate a view"
	#beginning of class suite
	#print (View.__doc__)
	#Инициализация методов класса
	def __init__(self):
		self.db=db()
		self.relations=db.relations()
		self.log=None
		self.name=''
		self.fields=[]
		self.query=''
		self.param=''
	
	def SqlName(self, name):
		"Function returns sql string for the view name"
		return
		
	def SqlFields(self, fields):
		"Function returns sql string for the view fields"
		return
		
	def SqlCreate(self, name, fields, query):
		"Function returns sql string for the view create query"
		return "CREATE"+self.param+"VIEW "+self.SqlName(name)+self.SqlFields(fields)+" AS "+query
		
	def SqlDrop(self, name):
		"Function returns sql string for the view drop query"
		return "DROP VIEW "+self.SqlName(name)
		
	def count(self, name):
		'''Function counts views with the name of the view'''
		#beginning of function suite
		#print(self.count.__doc__)
		#end of function suite
		#Функция возвращает результат выполнения функции self.FdbArticlesToImport.CountViews() с именем вида в качестве аргумента
		return self.Relations.CountViews([self.SqlName(name)])
		
	def create(self, name, fields, query):
		'''Function creates the view '''
		#beginning of function suite
		#print(FdbArticlesToImport.create.__doc__)
		#Подсчетывается количество видов с данным именем
		before=self.count()
		#Если количество=0
		if before==0:
			#Выполняется подключение к базе данных
			self.fdb.connect()
			# Выполняется запрос на создание вида в Firebird:
			self.fdb.cursor.execute(self.SqlCreate(name, fields, query))
			#commit
			self.fdb.conn.commit()
			#Закрывается подключение к базе данных
			self.fdb.disconnect()
			#Подсчетывается количество видов с данным именем
			result=self.count(name)-before
			#В переменную класса log записывается лог
			self.log='created'
		else:
			#Переменной result присваивается нулевое значение
			result=0
			#В переменную класса log записывается лог
			self.log='exists'
		#end of function suite
		#Функция возвращает количество созданных видов
		return result

	def drop(self, name):
		'''Function drops the view'''
		#beginning of function suite
		#print(FdbArticlesToImport.drop.__doc__)
		#Подсчетывается количество видов с данным именем
		before=self.count()
		#Если количество не равно нулю:
		if before!=0:
			#Выполняется подключение к базе данных
			self.fdb.connect()
			# Выполняется запрос на удаление вида в Firebird:
			self.fdb.cursor.execute(self.SqlDrop(name))
			#commit
			self.fdb.conn.commit()
			#Закрывается подключение к базе данных
			self.fdb.disconnect()
			#Подсчетывается количество видов с данным именем
			result=before-self.count(name)
			self.log='droped'
		else:
			#Переменной result присваивается нулевое значение
			result=0
			#В переменную класса log записывается лог
			self.log='does not exist'
		#end of function suite
		#Функция возвращает количество уничтоженных видов
		return result






class FdbView:
	"This class is a base class to manipulate a view in firebird"
	#beginning of class suite
	#print (FdbView.__doc__)
	#Инициализация методов класса
	def __init__(self):
		
	
	def SqlName(self):
		"Function returns sql string for the view name"
		return 'X_OASUP_SO'+self.name
		
	def SqlFields(self):
		"Function returns sql string for the view fields"
		return ' '+'('+', '.join(self.fields)+')'



class ArticlesToImport(FdbView):
	"This class is a manipulator for articles to import in firebird"
	#beginning of class suite
	#print (FdbArticlesToImport.__doc__)
	def __init__(self):
		super(ArticlesToImport, self).__init__()
		self.name='ARTICLES_TO_IMPORT'
		self.fields=['art_id', 'section_id', 'sectname', 'doc_type', 'doc_name', 'designatio', 'name', 'note', 'mu_id', 'purchased', 'format', 'modifdate', 'version_id']
		self.query='''select 

DISTINCT 

a.art_id, a.section_id, ss.sectname, d.doc_type, e.doc_name, a.designatio, a.name, a.note, a.mu_id, a.purchased, d.format, a.modifdate, d.version_id

     FROM articles a, articles_view av, archives ar, pc, ssections ss, doclist d, doctypes e

          WHERE
               
               e.doc_type=d.doc_type
      
               AND d.doc_id=a.doc_id
               
               AND a.section_id=ss.section_id

               AND extract(YEAR from a.chkindate)>2005

               AND a.art_id>0

               AND ar.archive_id=av.archive_id

               AND (ar.archive_id=31
                        OR ar.archive_id=34
                        OR ar.archive_id=35
                        OR ar.archive_id=36
                        OR ar.archive_id=37
                        OR ar.archive_id=38
                        OR ar.archive_id=41
                        OR ar.archive_id=42
                        OR ar.archive_id=43)

               AND CHAR_LENGTH(TRIM(a.name))>0

               AND 

                (
                 (a.art_id=pc.part_aid
                  OR a.art_id=pc.proj_aid)

                 AND av.art_id=pc.proj_aid
                 AND CHAR_LENGTH(TRIM(a.designatio))>0
                 AND (a.SECTION_ID=1
                          OR a.SECTION_ID=3
                          OR a.SECTION_ID=4
                          OR a.SECTION_ID=8)
                )

UNION ALL

select 

DISTINCT 

a.art_id, a.section_id, ss.sectname, d.doc_type, e.doc_name, a.designatio, a.name, a.note, a.mu_id, a.purchased, d.format, a.modifdate, d.version_id

     FROM 

articles a, articles_view av, archives ar, pc, ssections ss, doclist d, doctypes e

          WHERE
               
               e.doc_type=d.doc_type
      
               AND d.doc_id=a.doc_id

               AND a.section_id=ss.section_id

               AND extract(YEAR from a.chkindate)>2005

               AND a.art_id>0

               AND ar.archive_id=av.archive_id

               AND (ar.archive_id=31
                        OR ar.archive_id=34
                        OR ar.archive_id=35
                        OR ar.archive_id=36
                        OR ar.archive_id=37
                        OR ar.archive_id=38
                        OR ar.archive_id=41
                        OR ar.archive_id=42
                        OR ar.archive_id=43)

               AND CHAR_LENGTH(TRIM(a.name))>0

               AND 
                
                (
                 a.art_id=pc.part_aid
                 AND av.art_id=pc.proj_aid
                 AND CHAR_LENGTH(TRIM(a.designatio))=0
                 AND (a.SECTION_ID=5
                          OR a.SECTION_ID=6
                          OR a.SECTION_ID=7)
                )'''


class OraView:
	"This class is a base class to manipulate a view in oracle"
	#beginning of class suite
	#print (OraView.__doc__)
	#Инициализация методов класса
	def __init__(self):
		self.db=oracle()
		self.Relations=OraRelations()
		self.log=None
		self.name=''
		self.fields=[]
		self.query=''
		self.param=' OR REPLACE NOFORCE '
	
	def SqlName(self):
		"Function returns sql string for the view name"
		return '''"OMP_ADM"."X_OASUP_SO"'''+self.name
		
	def SqlFields(self):
		"Function returns sql string for the view fields"
		return ' '+'("'+'", "'.join(self.fields)+'")'
		
	def SqlCreate(self):
		"Function returns sql string for the view create query"
		return "CREATE"+self.param+"VIEW "+self.SqlName()+self.SqlFields()+" AS "+self.query
		
	def SqlDrop(self):
		"Function returns sql string for the view drop query"
		return "DROP VIEW "+self.SqlName()
		
	def count(self):
		'''Function counts views with the name of the view'''
		#beginning of function suite
		#print(self.count.__doc__)
		#end of function suite
		#Функция возвращает результат выполнения функции self.FdbArticlesToImport.CountViews() с именем вида в качестве аргумента
		return self.Relations.CountViews([self.SqlName()])
		
	def create(self):
		'''Function creates the view '''
		#beginning of function suite
		#print(FdbArticlesToImport.create.__doc__)
		#Подсчетывается количество видов с данным именем
		before=self.count()
		#Если количество=0
		if before==0:
			#Выполняется подключение к базе данных
			self.fdb.connect()
			# Выполняется запрос на создание вида в Firebird:
			self.fdb.cursor.execute(self.SqlCreate())
			#commit
			self.fdb.conn.commit()
			#Закрывается подключение к базе данных
			self.fdb.disconnect()
			#Подсчетывается количество видов с данным именем
			result=self.count()-before
			#В переменную класса log записывается лог
			self.log='created'
		else:
			#Переменной result присваивается нулевое значение
			result=0
			#В переменную класса log записывается лог
			self.log='exists'
		#end of function suite
		#Функция возвращает количество созданных видов
		return result

	def drop(self):
		'''Function drops the view'''
		#beginning of function suite
		#print(FdbArticlesToImport.drop.__doc__)
		#Подсчетывается количество видов с данным именем
		before=self.count()
		#Если количество не равно нулю:
		if before!=0:
			#Выполняется подключение к базе данных
			self.fdb.connect()
			# Выполняется запрос на удаление вида в Firebird:
			self.fdb.cursor.execute(self.SqlDrop())
			#commit
			self.fdb.conn.commit()
			#Закрывается подключение к базе данных
			self.fdb.disconnect()
			#Подсчетывается количество видов с данным именем
			result=before-self.count()
			self.log='droped'
		else:
			#Переменной result присваивается нулевое значение
			result=0
			#В переменную класса log записывается лог
			self.log='does not exist'
		#end of function suite
		#Функция возвращает количество уничтоженных видов
		return result

class OraKobjToImport:
	"This class is a manipulator for konstrobj to import view"
	#beginning of class suite
	#print (OraKobjToImport.__doc__)
	
	name='X_OASUP_SO_KOBJ_TO_IMPORT'
	
	def create():
		'''Function creates the view'''
		#beginning of function suite
		#print(OraKobjToImport.create.__doc__)
		
		name=OraKobjToImport.name
		#Выполняется подключение к базе данных Oracle
		db.oracle.connect()
		
		#Выполняется транзакция подсчета количества видов с именем вида в каталоге видов
		db.oracle.cursor.execute("SELECT COUNT(*) FROM USER_VIEWS WHERE VIEW_NAME=:VIEW_NAME",VIEW_NAME=name)
		#Количество видов с именем вида присваивается переменной before
		before=db.oracle.cursor.fetchall()[0][0]
		if before==0:
		
			# Выполняется запрос на создание вида в Oracle:
			db.oracle.cursor.execute(''' CREATE OR REPLACE NOFORCE VIEW "OMP_ADM"."'''+name+'''" 

			("UNVCODE", "REVISION", "ITEMTYPE", "ITEMTYPE_NAME", "SIGN", "NAME", "NOTICE", "MEASCODE", "MEASNAME", "SUPPLYTYPE", "FORMAT", "OWNER", "OWNER_NAME", "RECDATE", "PRODCODE", "OMP_OBJECTS_CODE", "FIRST_PROMCODE", "LAST_PROMCODE", "CURRENT_STATE", "STATEDATE", "LASTNAME") 
					
					AS 
					
					SELECT a.UNVCODE, a.REVISION, a.ITEMTYPE, b."NAME" AS "ITEMTYPE_NAME", a.SIGN,
a."NAME", a.NOTICE, a.MEASCODE, c."NAME" as MEASNAME, a.SUPPLYTYPE, a.FORMAT, 
a.OWNER, d."NAME" as "OWNER_NAME", a.RECDATE, a.PRODCODE, e.CODE as "OMP_OBJECTS_CODE",
g.CODE as "FIRST_PROMCODE", h.CODE as "LAST_PROMCODE", i.CURRENT_STATE, i.STATEDATE, i.LASTNAME


FROM OMP_ADM.KONSTROBJ a, OMP_ADM.KO_TYPES b, 
    OMP_ADM.MEASURES c, OMP_ADM.OWNER_NAME d,
    OMP_ADM.BUSINESS_OBJECTS e,
    
    (SELECT a.DOCCODE as "UNVCODE", MIN(b.CODE) AS "CODE"
        FROM OMP_ADM.BUSINESS_OBJECTS a, OMP_ADM.BUSINESSOBJ_PROMOTION b, OMP_ADM.BUSINESSOBJ_STATES c
            WHERE b.BUSINESSOBJ=a.CODE
                AND c.CODE=b.CURRENT_STATE
                AND a."TYPE" IN (0,1,2,3,4,5,6,22)
        GROUP BY a.DOCCODE) g,

    (SELECT a.DOCCODE as "UNVCODE", MAX(b.CODE) AS "CODE"
        FROM OMP_ADM.BUSINESS_OBJECTS a, OMP_ADM.BUSINESSOBJ_PROMOTION b, OMP_ADM.BUSINESSOBJ_STATES c
            WHERE b.BUSINESSOBJ=a.CODE
                AND c.CODE=b.CURRENT_STATE
                AND a."TYPE" IN (0,1,2,3,4,5,6,22)
        GROUP BY a.DOCCODE) h,

    (SELECT a.CODE, b."NAME" as "CURRENT_STATE", a.STATEDATE, a.LASTNAME 
        FROM OMP_ADM.BUSINESSOBJ_PROMOTION a, OMP_ADM.BUSINESSOBJ_STATES b
            WHERE b.CODE=a.CURRENT_STATE) i

            
            WHERE b.CODE=a.ITEMTYPE
                AND c.CODE=a.MEASCODE
                AND d.OWNER=a.OWNER
                AND e.DOCCODE=a.UNVCODE
                AND e."TYPE"=a.ITEMTYPE
                AND g.UNVCODE=a.UNVCODE
                AND h.UNVCODE=a.UNVCODE
                AND h.CODE=i.CODE
                AND a.ITEMTYPE IN (0,1,2,3,4,5,6,22)''')

		#Выполняется транзакция подсчета количества видов с именем вида в каталоге видов
		db.oracle.cursor.execute("SELECT COUNT(*) FROM USER_VIEWS WHERE VIEW_NAME=:VIEW_NAME",VIEW_NAME=name)
		#Количество видов с именем вида присваивается переменной after
		after=db.oracle.cursor.fetchall()[0][0]
		#Закрывается подключение к базе данных Oracle
		db.oracle.disconnect()
		#end of function suite
		return after-before

	def drop():
		'''Function drops the view'''
		#beginning of function suite
		#print(OraKobjToImport.drop.__doc__)
		
		name=OraKobjToImport.name
		#Выполняется подключение к базе данных
		db.oracle.connect()
		
		#Выполняется транзакция подсчета количества видов с именем вида в каталоге видов
		db.oracle.cursor.execute("SELECT COUNT(*) FROM USER_VIEWS WHERE VIEW_NAME=:VIEW_NAME",VIEW_NAME=name)
		#Количество видов с именем вида присваивается переменной before
		before=db.oracle.cursor.fetchall()[0][0]
		if before!=0:
			# Выполняется запрос на уничтожение вида:
			db.oracle.cursor.execute('''DROP VIEW "OMP_ADM"."'''+name+'''"''')
		#Выполняется транзакция подсчета количества видов с именем вида в каталоге видов
		db.oracle.cursor.execute("SELECT COUNT(*) FROM USER_VIEWS WHERE VIEW_NAME=:VIEW_NAME",VIEW_NAME=name)
		#Количество видов с именем вида присваивается переменной after
		after=db.oracle.cursor.fetchall()[0][0]
		#Закрывается подключение к базе данных
		db.oracle.disconnect()
		#end of function suite
		return before-after

#end of OraKobjToImport class suite